package dao

import (
	"errors"
	"gitee.com/swsk33/server-demo/dataobject"
	"gorm.io/gorm"
)

// CharacterDAO 角色数据库访问层对象
type CharacterDAO struct {
	db *gorm.DB
}

// NewCharacterDAO CharacterDAO的构造函数（提供者）
func NewCharacterDAO(db *gorm.DB) *CharacterDAO {
	return &CharacterDAO{db: db}
}

// Insert 插入角色对象
func (dao *CharacterDAO) Insert(char *dataobject.Character) {
	dao.db.Create(char)
}

// DeleteById 根据ID删除
func (dao *CharacterDAO) DeleteById(id int) {
	dao.db.Delete(&dataobject.Character{ID: id})
}

// Update 更新记录（以ID为依据）
func (dao *CharacterDAO) Update(char *dataobject.Character) {
	dao.db.Model(&dataobject.Character{ID: char.ID}).Updates(char)
}

// FindById 根据ID查找角色
func (dao *CharacterDAO) FindById(id int) *dataobject.Character {
	var char dataobject.Character
	dao.db.Where("id = ?", id).First(&char)
	return &char
}

// FindAll 查询全部角色
func (dao *CharacterDAO) FindAll() *[]dataobject.Character {
	var chars []dataobject.Character
	dao.db.Find(&chars)
	return &chars
}

// IsCharacterExistsById 判断某个ID的角色记录是否存在
func (dao *CharacterDAO) IsCharacterExistsById(id int) bool {
	// 先尝试获取
	var char dataobject.Character
	result := dao.db.First(&char, id)
	// 如果存在错误且错误类型是记录不存在，则返回false，否则返回true
	return !(result.Error != nil && errors.Is(result.Error, gorm.ErrRecordNotFound))
}